/**
 * @file ROS_map_plan.h
 * @author circleup (circleup@foxmail.com)
 * @brief GPS 位置相关计算服务函数
 * @version 2.7
 * @date 2020-07-08
 * 
 * @copyright Copyright (c) 2020
 * 
 */

#ifndef _ROS_MAP_PLAN_H_
#define _ROS_MAP_PLAN_H_

///< 预瞄点
#define preview_point   5

/**
 * @brief 经纬度位置结构体
 * 
 */
typedef struct POS
{
  double lattitude;   ///< 纬度
  double longitude;   ///< 经度
} POS_T;

/**
 * @brief 规划路径容器状态
 * 
 */
typedef enum PLANPOINTSTATUS
{
  Normal = 0,   ///< 正常
  NoPoints,     ///< 没有点
  LoseGPS,      ///< 失去GPS
  Errors,       ///< 异常
  SUM
}PLANPOINTSTATUS_T;

/**
 * @brief 规划文件路径点加载容器
 * 
 */
extern std::vector<POS_T> v;

/**
 * @brief 一次性加载所有规划点
 * 
 * @return true 
 * @return false 
 */
bool AddPlanPoint(void);

/**
 * @brief 在规划点容器中找寻与当前点大于 5m 的点
 * 
 * @param param 当前点
 * @return PLANPOINTSTATUS_T 返回寻找状态
 */
PLANPOINTSTATUS_T FindTargetPoint(POS_T param);

/**
 * @brief 更新在 RVIZ 中现实的点
 * 
 */
void update_rviz_points(void);

/**
 * @brief 初始化要显示在 rviz 中的点
 * 
 */
void init_rviz_points(void);

#endif